#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<windows.h>
//全局变量
int high, width;//游戏尺寸
int bird_x, bird_y;//小鸟位置
int bar_y, bar_xtop, bar_xdown;//障碍物坐标
int score;
//光标移动到x,y位置
void gotoxy(int x, int y) {
	HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
	COORD pos;
	pos.X = x;
	pos.Y = y;
	SetConsoleCursorPosition(handle, pos);
}
//第二个值为0表示隐藏光标
void HideCursur() {
	CONSOLE_CURSOR_INFO cursor_info = { 1,0 };
	SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}
//数据初始化
void startup() {
	high = 15;
	width = 30;
	bird_x = 0;
	bird_y = width / 3;
	bar_y = width;
	bar_xtop = high / 4;
	bar_xdown = high / 2;
	score = 0;
	HideCursur();//隐藏光标
}
//显示画面
void show() {
	gotoxy(0, 0);//光标移动到原点位置，以下重画清屏
	int i, j;
	for (i = 0; i <= high; i++) {
		for (j = 0; j <= width; j++) {
			if (i == bird_x && j == bird_y) {
				printf("@");//输出小鸟
			}
			else if (j == bar_y && (i <= bar_xtop-1 || i >= bar_xdown+1)) {
				printf("*");//输出障碍物
			}
			else {
				printf(" ");//输出空格
			}
		}
		printf("\n");
	}
	printf("得分：%d\n", score);
}
//与用户输入无关的更新
void updatewithoutinput() {
	if (bar_y-1 == bird_y) {
		if (bird_x > bar_xtop&& bird_x < bar_xdown) {
			score++;
		}
		else {
			bird_y--;
		}
		if (bird_y == 0) {
			printf("game over!\n");
			exit(0);
		}
	}
	if (bird_x == 0) {//防止小鸟飞出上下边框
		bird_x++;
	}
	if (bird_x == high) {//防止小鸟飞出上下边框
		bird_x--;
	}
	bird_x++;
	if (bar_y > 0) {
		bar_y--;
	}
	else {
		bar_y = width;
		int randposition=rand()%(high-5);
		bar_xtop = randposition;
		bar_xdown = randposition + high / 4 ;
	}
	Sleep(150);
}
//与用户输入有关的更新
void updatewithinput() {
	char input;
	if (_kbhit()) {
		input = _getch();
		if (input == ' ') {
			bird_x = bird_x - 2;
		}
	}
}
int main()
{
	startup();
	while (1) {
		show();
		updatewithoutinput();
		updatewithinput();
	}
	return 0;
}